package br.com.findme.findmeserver.entidade;

import java.io.Serializable;
import java.lang.reflect.Type;

import javax.persistence.*;

import br.com.findme.findmeserver.entidade.Mensagem;
import br.com.findme.findmeserver.entidade.Usuario;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

import java.sql.Timestamp;


/**
 * The persistent class for the T_MENSAGEM database table.
 * 
 */
@Entity
@Table(name="T_MENSAGEM")
public class Mensagem implements Serializable {
	private static final long serialVersionUID = 1L;
	private int id;
	private Timestamp dataEnvio;
	private Timestamp dataRecebimento;
	private String mensagem;
	private Usuario usuario;
	private Usuario usuarioDestino;

	public Mensagem() {
	}


	@Id
	public int getId() {
		return this.id;
	}

	public void setId(int id) {
		this.id = id;
	}


	@Column(name="DATA_ENVIO")
	public Timestamp getDataEnvio() {
		return this.dataEnvio;
	}

	public void setDataEnvio(Timestamp dataEnvio) {
		this.dataEnvio = dataEnvio;
	}


	@Column(name="DATA_RECEBIMENTO")
	public Timestamp getDataRecebimento() {
		return this.dataRecebimento;
	}

	public void setDataRecebimento(Timestamp dataRecebimento) {
		this.dataRecebimento = dataRecebimento;
	}


	public String getMensagem() {
		return this.mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}


	//bi-directional many-to-one association to Usuario
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="USUARIO_ID")
	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}


	//bi-directional many-to-one association to Usuario
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="USUARIO_DESTINO")
	public Usuario getUsuarioDestino() {
		return this.usuarioDestino;
	}

	public void setUsuarioDestino(Usuario UsuarioDestino) {
		this.usuarioDestino = UsuarioDestino;
	}
	
	public static JsonSerializer<Mensagem> toJSON(){
		
		return new JsonSerializer<Mensagem>(){

			@Override
			public JsonElement serialize(Mensagem mensagem, Type type, JsonSerializationContext context) {				
				JsonObject jsonObject = new JsonObject();
		        jsonObject.addProperty("id", mensagem.getId());
		        jsonObject.add("usuario", Usuario.toJSON().serialize(mensagem.getUsuario(), null, null));
		        jsonObject.add("usuarioDestino", Usuario.toJSON().serialize(mensagem.getUsuarioDestino(),null,null));
		        if(mensagem.getDataRecebimento() != null)
		        	jsonObject.addProperty("dataRecebimento", mensagem.getDataRecebimento().toString());
		        jsonObject.addProperty("dataEnvio", mensagem.getDataEnvio().toString());
		        jsonObject.addProperty("mensagem", mensagem.getMensagem()); 
		        return jsonObject;			
		     }			
		};
		
	}


}